/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ufba.dcc.dao;

import br.ufba.dcc.jdbc.ConectionFactory;
import br.ufba.dcc.model.Dispositivo;
import br.ufba.dcc.model.Usuario;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author charles
 */
public class DispositivoDAO {
    
    	
	private Connection con;
	
	public DispositivoDAO(){
		con = ConectionFactory.getPostgresConnection();
		
	}
        
        
       public void cadastrarDispositivo(Dispositivo dispositivo){
		String sql = "INSERT INTO \"Dispositivos\" (descricao,categoria) VALUES (?, ?)";
		try {
			PreparedStatement prep = con.prepareStatement(sql);
			prep.setString(1, dispositivo.getDescricao());
			prep.setString(2, dispositivo.getCategoria());
			System.out.println(prep.toString());
			prep.execute();
			prep.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
       
       	public Dispositivo inserirDispositivoComRelacionameto(Dispositivo dispositivo) {
		// TODO Auto-generated method stub

		StringBuilder sb = new StringBuilder();
		
		sb.append("INSERT INTO \"Dispositivos\" (")
		.append(" descricao ")
		.append(",categoria ")
		.append(",fkusuario)")
		.append(" VALUES(?,?,?)");
	
		try {
			PreparedStatement cadDisp = con.prepareStatement(sb.toString());
			
			//cadEmp.setDate(1, (Date) emprestimoVO.getEntrada());
			//cadEmp.setDate(1,  (Date) emprestimoVO.getSaida());
			cadDisp.setString(1, dispositivo.getDescricao());
			cadDisp.setString(2, dispositivo.getCategoria());
                        cadDisp.setInt(3, dispositivo.getUsuario().getId());// id do objeto no banco
			
			cadDisp.executeUpdate();
			con.setAutoCommit(false);
			con.commit();
			con.close();
		} catch(SQLException ex) {
			System.err.println("SQLException: " + ex.getMessage());
			return null;
		}
		
		return dispositivo;
	}
       
//       SELECT * FROM "Dispositivos" disp
//         LEFT JOIN "Usuarios" usu
//            ON disp.fkusuario = usu.id WHERE disp."dataExclusao" IS NULL;
       
       	public List<Dispositivo> listarDispositivos(){
		String sql = "SELECT * FROM \"Dispositivos\" disp";
                sql += " LEFT JOIN \"Usuarios\" usu";
                sql += " ON disp.fkusuario = usu.id";
                sql += " WHERE disp.\"dataExclusao\" IS NULL";
		List<Dispositivo> list = null;
                
		try {
			PreparedStatement prep = con.prepareStatement(sql);
			System.out.println(prep.toString());
			ResultSet res = prep.executeQuery();
			list = new ArrayList<Dispositivo>();
			while(res.next()){
				Dispositivo temp = new Dispositivo();
				temp.setId(res.getInt(1));
				temp.setDescricao(res.getString(2));
				temp.setCategoria(res.getString(3));
                                
                                Usuario usuario = new Usuario();
				usuario.setId(res.getInt(6));	// res.getInt(4) é a fkUsuario			
				usuario.setNome(res.getString(7));
				usuario.setLogin(res.getString(8));
                                usuario.setSenha(res.getString(9));
                                
                                temp.setUsuario(usuario);
				list.add(temp);
			}
			prep.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return list;
	}
        
        
               	public List<Dispositivo> ListarDispositivosById(Usuario usuario){
		String sql = "SELECT * FROM \"Dispositivos\" disp";
                sql += " LEFT JOIN \"Usuarios\" usu";
                sql += " ON disp.fkusuario = usu.id";
                sql += " WHERE disp.\"dataExclusao\" IS NULL";
		List<Dispositivo> list = null;
                
                String clausulaWhere = "";
                if(usuario != null && usuario.getId() != null){
                    clausulaWhere += " AND disp.fkusuario = ?";
                }
                
                sql = sql + clausulaWhere;
		try {
			PreparedStatement prep = con.prepareStatement(sql);
                        if(usuario != null && usuario.getId() != null){
                            prep.setInt(1, usuario.getId());
                        }
			System.out.println(prep.toString());
                        
			ResultSet res = prep.executeQuery();
			list = new ArrayList<Dispositivo>();
			while(res.next()){
				Dispositivo temp = new Dispositivo();
				temp.setId(res.getInt(1));
				temp.setDescricao(res.getString(2));
				temp.setCategoria(res.getString(3));
                                
                                Usuario usu = new Usuario();
				usu.setId(res.getInt(6));	// res.getInt(4) é a fkUsuario			
				usu.setNome(res.getString(7));
				usu.setLogin(res.getString(8));
                                usu.setSenha(res.getString(9));
                                
                                temp.setUsuario(usu);
				list.add(temp);
			}
			prep.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return list;
	}
        
        
        
            public void atualizarDispositivo(Dispositivo dispositivo){
		String sql = "UPDATE \"Dispositivos\" set fkusuario = ? WHERE id = ?";
		try {
			PreparedStatement prep = con.prepareStatement(sql);
			prep.setInt(1, dispositivo.getUsuario().getId());
			prep.setInt(2, dispositivo.getId());
			System.out.println(prep.toString());
			prep.execute();
			prep.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
            }
            
        
        
}
